from django.core .cache import cache
from django.http import JsonResponse
from django.shortcuts import render

# Create your views here.
#获取省份
from django.views import View

from apps.areas.models import Area

#省
class ProvinceAreasView(View):
    """省级地区"""

    def get(self, request):
        #获取省级数据
        #获取缓存
        province_list=cache.get('province_list')


        if province_list is None:
            print("_____________")
            try:
                #查询出错所以不
                sheng=Area.objects.filter(parent__isnull=True)
                province_list=[]
                for i in sheng:
                    province_list.append({'id':i.id,
                                       "name":i.name})
                #设置缓存
                cache.set('province_list',province_list,300)
            except Exception as  a:
                # 如果报错, 则返回错误原因:
                return JsonResponse({'code': 400, 'errmsg': '省份数据错误'})

            print(province_list)
            # 3.返回整理好的省级数据
        return JsonResponse({'code': 0, 'errmsg': 'OK', 'province_list': province_list})

class SubAreasView(View):
    """子级地区：市和区县"""

    def get(self, request, pk):
        """提供市或区地区数据
        1.查询市或区数据
        2.序列化市或区数据
        3.响应市或区数据
        """
        sub_data=cache.get(f"sub_data{pk}")
        if sub_data is None:
            try:
                 # 1.查询市或区数据
                sub_model_list = Area.objects.filter(parent=pk)
                 #  查询省份数据
                parent_model = Area.objects.get(id=pk)

                # 2.整理市或区数据
                sub_list = []
                for sub_model in sub_model_list:
                    sub_list.append({'id': sub_model.id,
                                     'name': sub_model.name})

                sub_data = {
                    'id': parent_model.id,  # pk
                    'name': parent_model.name,
                    'subs': sub_list
                }
                cache.set(f"sub_data{pk}",sub_data,300)
            except Exception as e:
                return JsonResponse({'code': 400,
                                          'errmsg': '城市或区县数据错误'})

        # 3.响应市或区数据 ok: 0
        return JsonResponse({'code': 0,
                                  'errmsg': 'OK',
                                  'sub_data': sub_data})